package br.unifor.ads.pjappfinanceiro.business;

import java.sql.SQLException;

import org.apache.log4j.Logger;

import br.unifor.ads.pjappfinanceiro.cripto.Criptografia;
import br.unifor.ads.pjappfinanceiro.dao.UsuarioDAO;
import br.unifor.ads.pjappfinanceiro.entity.Usuario;
import br.unifor.ads.pjappfinanceiro.exceptions.BusinessException;
import br.unifor.ads.pjappfinanceiro.internacionalizacao.Messages;

public class UsuarioBussiness {

	Logger logger = Logger.getLogger(UsuarioBussiness.class);
	private UsuarioDAO usuarioDAO = new UsuarioDAO();

	public void cadastrarUsuario(Usuario usuario) throws BusinessException {
		logger.debug("iniciando o método: "
				+ new Throwable().getStackTrace()[0]);

		try {
			usuario.setSenha(Criptografia.criptografar(usuario.getSenha()));
			usuarioDAO.salvar(usuario);
		} catch (SQLException e) {
			logger.error(Messages.MSG_INSERCAO_EX, e);
			throw new BusinessException(Messages.MSG_INSERCAO_EX);
		}

		logger.debug("finalizando o método: "
				+ new Throwable().getStackTrace()[0]);
	}
	
	
	public void alterarUsuario(Usuario usuario) throws BusinessException {
		logger.debug("iniciando o método: "
				+ new Throwable().getStackTrace()[0]);

		try {
			usuario.setSenha(Criptografia.criptografar(usuario.getSenha()));
			usuarioDAO.atualizar(usuario);
		} catch (SQLException e) {
			logger.error(Messages.MSG_ATUALIZACAO_EX1, e);
			throw new BusinessException(Messages.MSG_ATUALIZACAO_EX1);
		}

		logger.debug("finalizando o método: "
				+ new Throwable().getStackTrace()[0]);
	}
	
	

	public void excluirUsuario(Integer id) throws BusinessException {
		logger.debug("iniciando o método: "
				+ new Throwable().getStackTrace()[0]);

		try {
			
			usuarioDAO.excluirPorId(id);
		} catch (SQLException e) {
			logger.error(Messages.MSG_INSERCAO_EX, e);
			throw new BusinessException(Messages.MSG_INSERCAO_EX);
		}

		logger.debug("finalizando o método: "
				+ new Throwable().getStackTrace()[0]);

	}

	public Usuario localizarUsuarioPorLogin(String login)
			throws BusinessException {
		logger.debug("iniciando o método: "
				+ new Throwable().getStackTrace()[0]);

		try {

			return usuarioDAO.buscarPorLogin(login);
		} catch (SQLException e) {
			logger.error(Messages.MSG_BUSCA_EX, e);
			throw new BusinessException(Messages.MSG_BUSCA_EX);
		}

	}

	public Boolean login(String login, String senha) throws BusinessException {
		logger.debug("iniciando o método: "
				+ new Throwable().getStackTrace()[0]);
		Usuario usuario = null;
		try {
			usuario = usuarioDAO.buscarPorLoginESenha(login,
					Criptografia.criptografar(senha));
			if (usuario != null) {
				return true;
			} else {
				return false;
			}
		} catch (SQLException e) {
			logger.error(Messages.MSG_BUSCA_EX, e);
			throw new BusinessException(Messages.MSG_BUSCA_EX);
		} finally {
			logger.debug("finalizando o método: "
					+ new Throwable().getStackTrace()[0]);
		}

	}


	
	/*
	  public static void main(String[] args) throws SQLException { Usuario user
	  = new Usuario();
	  
	  
	  user.setNome("Fábio"); user.setLogin("fabio"); user.setSenha("123");
	  user.setSenha(Criptografia.criptografar(user.getSenha()));
	  usuarioDAO.salvar(user);
	  
	  
	  }
	 */
	 
	 
}
